package com.meisupic.copyright.domain.vo;

import static com.meisupic.copyright.common.Constants.APPLY_TYPE_AGENT;

import com.meisupic.copyright.validategroups.Published;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiResponse;
import java.util.Date;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Digits.List;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.constraints.URL;
import org.springframework.format.annotation.DateTimeFormat;
import springfox.documentation.annotations.ApiIgnore;

/**
 * @Author lanjian
 * @Date 2018/8/30 下午10:19
 */
@Data
@ApiModel
public class CopyrightWorksApiVo {

  @ApiModelProperty(value = "登记作品id，修改登记作品时必填。")
  private Long id;

  /**
   * 作品名称.
   */
  @NotEmpty(message = "作品名称不能为空")
  @ApiModelProperty(value = "作品全称", required = true)
  private String worksFullName;

  /**
   * 作品类型
   */
  @NotEmpty(message = "作品类型不能为空")
  @Pattern(regexp = "^photoProductRegist|chartProductRegist|artProductRegist$", message = "作品类型值错误")
  @ApiModelProperty(value = "登记作品类型,photoProductRegist=摄影作品、artProductRegist$=美素作品、chartProductRegist=工程图作品", required = true, allowableValues = "photoProductRegist,chartProductRegist,artProductRegist")
  private String worksType;


  /**
   * 作者
   */
  @NotEmpty(message = "作者不能为空")
  @ApiModelProperty(value = "作者姓名", required = true)
  private String author;


  /**
   * 创作完成国家
   */
  @NotBlank(message = "创作完成国家不能为空")
  @ApiModelProperty(value = "创作完成国家", required = true)
  private String creationCountry;

  /**
   * 创作完成省份
   */
  @ApiModelProperty(value = "创作完成省份，当创作完成国家为国外时可为空。")
  private String creationProvince;


  /**
   * 创作完成城市
   */
  @NotBlank(message = "创作地点不能为空")
  @ApiModelProperty(value = "创作完成城市", required = true)
  private String creationCity;

  /**
   * 创作日期
   */
  @NotNull(message = "创作开始日期不能为空")
  @Past(message = "创作开始日期须小于当前日期")
  @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE)
  @ApiModelProperty(value = "创作完成日期，日期格式yyyy-MM-dd", required = true)
  private Date creationDate;

  /**
   * 发表状态
   */
  @NotNull(message = "请选择发表状态")
  @ApiModelProperty(value = "作品发表状态。1=已发表、2=未发表", required = true,allowableValues = "1,2")
  private Integer publishStatus;

  /**
   * 首次发表国家
   */
  @NotEmpty(message = "请选择首次发表国家", groups = Published.class)
  @ApiModelProperty(value = "首次发表国家，当发表状态为已发表时必填")
  private String firstPublishCountry;

  /**
   * 首次发表省份
   */
  @ApiModelProperty(value = "首次发表省份，当首次发表国家为国外时必填")
  private String firstPublishProvince;

  /**
   * 首次发表城市
   */
  @NotEmpty(message = "请选择首次发表城市", groups = Published.class)
  @ApiModelProperty(value = "首次发表城市，当发表状态为已发表时必填")
  private String firstPublishCity;


  /**
   * 首次发表日期
   */
  @NotNull(message = "请选择首次发表日期", groups = Published.class)
  @Past(message = "首次发表日期须小于当前日期", groups = Published.class)
  @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE)
  private Date firstPublishDate;

  /**
   * 作品主要特点
   */
  @NotEmpty(message = "作品主要特点不能为空")
  @Length(max = 600, message = "作品主要特点长度不超过200")
  @ApiModelProperty(value = "作品主要特点,字符长度不超过200",required = true)
  private String mainFeatures;

  /**
   * 权利归属方式
   */
  @NotNull(message = "权利归属方式不能为空")
  @Range(min = 1, max = 3, message = "权利归属方式值错误")
  @ApiModelProperty(value = "权利归属方式。1=个人作品、2=合作作品、3=法人作品、4=职务作品、5=委托作品。目前只支持个人作品和法人作品。",allowableValues = "1,3",required = true)
  private Integer rightOwnMode;

  /**
   * 权利取得方式
   */
  @NotNull(message = "权利取得方式不能为空")
  @Range(min = 1, max = 1, message = "权利取得方式值错误")
  @ApiModelProperty(value = "权利取得方式。1=原始取得、2=承受、3=继承、4=其他。目前只支持原始取得。",allowableValues = "1",required = true)
  private Integer rightFetchMode;

  /**
   * 创作性质
   */
  @NotNull(message = "创作性质不能为空")
  @Range(min = 1, max = 1, message = "创作性质值错误")
  @ApiModelProperty(value = "创作性质。1=原创、2=改变、3=翻译、4=汇编、5=注释、6=整理、7=其他。目前只支持原创作品登记。",allowableValues = "1",required = true)
  private Integer creativeNature;


  /**
   * 申请类型
   */
  @ApiModelProperty(hidden = true)
  private Integer applyType = APPLY_TYPE_AGENT;

  @NotEmpty(message = "作品地址不能为空")
  @URL(message = "作品地址url错误")
  @ApiModelProperty(value = "作品url值",required = true)
  private String worksImageUrl;

  /**
   * 申请人Id
   */
  @NotNull(message = "申请人实名认证id不能为空")
  @ApiModelProperty(value = "申请人实名认证id.",required = true)
  private Long applicantId;

  @ApiModelProperty(hidden = true)
  private Boolean display = false;

}
